package com.java214.array.sort;

public class BubbleSort {
	
	/**
	 * 冒泡排序
	*<p>Title: sort</p> 
	*<p>Description: </p> 
	　 * @param arr
	 */
	public static void sort(long[] arr){
	    //i代表次数  temp临时存储交换区  j当前数值
		long tmp=0;//定义临时存储区
		for(int i=0;i<arr.length;i++){
			//遍历数组长度
			for(int j=arr.length-1;j>i;j--){
				//j从最底下数据开始循环,前面的排过序了,所以j大于i，i表示第几趟循环了
				if(arr[j]<arr[j-1]){//如果后面那个小于前面那个值，进行交换
					tmp=arr[j];//交换排序
					arr[j]=arr[j-1];
					arr[j-1]=tmp;
					
				}
			}
		}
	}


	/**
	 * 选择排序
	 * @param arr
	 */
	public static void choseSort(long[] arr){
		int k=0;//k始终指向最小的数据
		long temp=0;//临时变量
		for(int i=0;i<arr.length-1;i++){
			//i代表循环了几趟了
			k=i;
			for(int j=i;j<arr.length;j++){
				if(arr[j]<arr[k]){//j如果比k还要小
					k=j;//j就赋值于k
				}
			}
			//k就和最小的数据i进行交换，
			temp=arr[i];
			arr[i]=arr[k];
			arr[k]=temp;
		}
	}


	/**
	 * 直接插入排序
	 * @param arr
	 */
	public static void InsertSort(long[] arr){
		//不从0开始，从0开始无意义
		long temp=0;//临时存储变量
		for(int i=1;i<arr.length;i++){
			temp=arr[i];//初始值为数组中的某个值
			int j=i;//j从i的位置开始
			while (j>0 && arr[j]>=temp){//数组中的值如果比临时存储中的值大，那就直接右移
				arr[j]=arr[j-1];//右移赋值
				j--;//一直右移

			}
			arr[j]=temp;//j所在的位置就是插入点
		}
	}

	
	public static void main(String[] args) {
		long [] arrar=new long[]{34,33,2,1,-4};
		choseSort(arrar);
		for(long num:arrar){
			System.out.println(num);
		}
	
	}

}
